﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Drawing;
//using System.ComponentModel;
//using System.Drawing.Imaging;
//using System.Windows.Threading;

//namespace WebCam.Data.WebCamWorker
//{
//    public class MotionCaptureWorker : ISimpleWebCam
//    {
//        Rectangle rect;
//        Bitmap oldImage = null;
//        Color alarmColor;
//        const int delta = 70;

//        //BackgroundWorker bw;

//        const int interval = 1000 / 30;
//        OneShot shot;
//        DispatcherTimer timer = new DispatcherTimer();
//        public void Start()
//        {
//            if (shot != null)
//            {
//                shot.stopCam();
//            }
//            shot = new OneShot();
//            shot.InitcamNew();

//            timer.Interval = new TimeSpan(0, 0, 0, 0, interval);
//            timer.Tick += new EventHandler(timer_Tick);
//            timer.Start();
//        }

//        object lock_Obj = new object();

//        void timer_Tick(object sender, EventArgs e)
//        {
//            GetImage();
//        }

//        public MotionCaptureWorker()
//        {
//            rect = new Rectangle(0, 0, Width, Height);
//            alarmColor = Color.FromArgb(255, 0, 0);
//            //bw = new BackgroundWorker();
//            //bw.DoWork += new DoWorkEventHandler(bw_DoWork);
//            //bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
//        }
        
//        //void bw_DoWork(object sender, DoWorkEventArgs e)
//        //{
//        //    Images images = (Images)e.Argument;
//        //    Bitmap image = images.newImage;
//        //    Bitmap oldImage = images.oldImage;
//        //    Bitmap tmp = (Bitmap)image.Clone();

//        //    BitmapData imageData = image.LockBits(rect, ImageLockMode.ReadOnly, image.PixelFormat);
//        //    BitmapData oldImageData = oldImage.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Canonical);
//        //    BitmapData tmpData = tmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Canonical);

//        //    unsafe
//        //    {
//        //        byte* pImage = (byte*)imageData.Scan0.ToPointer();
//        //        byte* pOldImage = (byte*)oldImageData.Scan0.ToPointer();
//        //        byte* pTmpImage = (byte*)tmpData.Scan0.ToPointer();

//        //        //int index = 0;
//        //        for (int i = 0; i < Width; i++)
//        //        {
//        //            for (int j = 0; j < Height; j++)
//        //            {
//        //                byte a = *pImage;
//        //                byte r = *(pImage + 1);
//        //                byte g = *(pImage + 2);
//        //                byte b = *(pImage + 3);

//        //                byte oa = *pOldImage;
//        //                byte or = *(pOldImage + 1);
//        //                byte og = *(pOldImage + 2);
//        //                byte ob = *(pOldImage + 3);

//        //                if (Math.Abs(r - or) + Math.Abs(g - og) + Math.Abs(b - ob) < 150)
//        //                {
//        //                    *pTmpImage = 255;
//        //                    *(pTmpImage+1) = 255;
//        //                    *(pTmpImage+2) = 0;
//        //                    *(pTmpImage+3) = 0;
//        //                }

//        //                pImage += 4;
//        //                pOldImage += 4;
//        //                pTmpImage += 4;
//        //                //index++;
//        //            }
//        //        }
//        //    }


//        //    //for (int i = 0; i < Width; i++)
//        //    //{
//        //    //    for (int j = 0; j < Height; j++)
//        //    //    {
//        //    //        Color c = image.GetPixel(i, j);
//        //    //        var H = c.GetHue() / 360;
//        //    //        var S = c.GetSaturation();
//        //    //        var B = c.GetBrightness();

//        //    //        Color c1 = oldImage.GetPixel(i, j);
//        //    //        var H1 = c1.GetHue() / 360;
//        //    //        var S1 = c1.GetSaturation();
//        //    //        var B1 = c1.GetBrightness();

//        //    //        if (Math.Abs(H - H1) + Math.Abs(S - S1) + Math.Abs(B - B1) > delta)
//        //    //        {
//        //    //            tmp.SetPixel(i, j, alarmColor);
//        //    //        }
//        //    //        else
//        //    //        {
//        //    //            tmp.SetPixel(i, j, c);
//        //    //        }
//        //    //    }
//        //    //}

//        //    e.Result = tmp;
//        //}

//        //void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
//        //{
//        //    Bitmap bmp = (Bitmap)e.Result;
//        //    if (OnBitmapLoaded != null)
//        //    {
//        //        lock (lock_Obj)
//        //        {
//        //            //Bitmap bmp = GetImage();
//        //            if (OnBitmapLoaded != null)
//        //            {
//        //                OnBitmapLoaded(bmp);
//        //            }
//        //        }
//        //    }
//        //}

//        //class Images
//        //{
//        //    public Bitmap oldImage;
//        //    public Bitmap newImage;
//        //}

//        protected void GetImage()
//        {
//            shot.UpdateImage();
//            Bitmap image = shot.AcurrShot;
            
//            if (oldImage == null)
//            {
//                oldImage = image;
//                return;
//            }

//            Bitmap tmp = (Bitmap)image.Clone();

//            BitmapData imageData = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
//            BitmapData oldImageData = oldImage.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
//            BitmapData tmpData = tmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

//            unsafe
//            {
//                byte* pImage = (byte*)imageData.Scan0.ToPointer();
//                byte* pOldImage = (byte*)oldImageData.Scan0.ToPointer();
//                byte* pTmpImage = (byte*)tmpData.Scan0.ToPointer();

//                //int index = 0;
//                for (int i = 0; i < Width; i++)
//                {
//                    for (int j = 0; j < Height; j++)
//                    {
//                        byte r = *pImage;
//                        byte g = *(pImage + 1);
//                        byte b = *(pImage + 2);

//                        byte or = *(pOldImage);
//                        byte og = *(pOldImage + 1);
//                        byte ob = *(pOldImage + 2);

//                        //if (Math.Abs(r - or) + Math.Abs(g - og) + Math.Abs(b - ob) < 150)
//                        if (Math.Abs(r - or) > delta || Math.Abs(g - og) > delta || Math.Abs(b - ob) > delta)
//                        {
//                            *pTmpImage = 0;
//                            *(pTmpImage + 1) = 0;
//                            *(pTmpImage + 2) = 255;
//                        }

//                        pImage += 3;
//                        pOldImage += 3;
//                        pTmpImage += 3;
//                        //index++;
//                    }
//                }
//            }

//            image.UnlockBits(imageData);
//            oldImage.UnlockBits(oldImageData);
//            tmp.UnlockBits(tmpData);

//            oldImage = image;

//            if (OnBitmapLoaded != null)
//            {
//                lock (lock_Obj)
//                {
//                    //Bitmap bmp = GetImage();
//                    if (OnBitmapLoaded != null)
//                    {
//                        OnBitmapLoaded(tmp);
//                    }
//                }
//            }
//            //if (!bw.IsBusy)
//            //{
//            //    //Bitmap tmp = new Bitmap(image);
//            //    bw.RunWorkerAsync(new Images() { newImage=image, oldImage=oldImage });
//            //}
//            //BitmapData data = tmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Canonical);

            

//            //for (int i = 0; i < Width; i++)
//            //{
//            //    for (int j = 0; j < Height; j++)
//            //    {
//            //        Color c = image.GetPixel(i, j);
//            //        var H = c.GetHue() / 360;
//            //        var S = c.GetSaturation();
//            //        var B = c.GetBrightness();

//            //        Color c1 = oldImage.GetPixel(i, j);
//            //        var H1 = c1.GetHue() / 360;
//            //        var S1 = c1.GetSaturation();
//            //        var B1 = c1.GetBrightness();

//            //        if(Math.Abs(H-H1) + Math.Abs(S-S1) + Math.Abs(B-B1) > delta)
//            //        {
//            //            tmp.SetPixel(i, j, alarmColor);
//            //        }
//            //        else
//            //        {
//            //            tmp.SetPixel(i, j, c);
//            //        }
//            //    }
//            //}

//            //oldImage = image;
//            //return tmp;

//            //image.Set

//            //var pixelsData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Canonical);
//            //var poi = pixelsData.Scan0;



//            //Graphics g = Graphics.FromImage(image);
//            //g.
//        }
//        public void Stop()
//        {
//            timer.Stop();
//            shot.stopCam();
//        }

//        public event BitmapLoader OnBitmapLoaded;

//        public int Width
//        {
//            get { return 640; }
//        }

//        public int Height
//        {
//            get { return 480; }
//        }

//        public double FPS
//        {
//            get { return interval; }
//        }
//    }
//}
